package br.com.siscov.model.funcionario.bo;

import java.sql.Connection;

import br.com.siscov.exceptions.IntegrationException;
import br.com.siscov.model.funcionario.dao.GerenteDAO;
import br.com.siscov.model.login.dao.LoginDAO;
import br.com.siscov.model.vo.GerenteVo;

public class GerenteBO extends DataAccessConnection {

	public void incluirGerente(GerenteVo gerenteVo) throws IntegrationException {
		Connection connection = obterConexao();
		GerenteDAO gerenteDAO;
		LoginDAO loginDAO;
		try {
			iniciarTransacao(connection);
			gerenteDAO = new GerenteDAO();
			loginDAO = new LoginDAO();

			gerenteDAO.incluirFuncionarioGerente(connection, gerenteVo);
			loginDAO.incluirAcesso(connection, gerenteVo.getLoginVo());
			gerenteDAO.incluirGerente(connection, gerenteVo.getMatricula(), gerenteVo.getLoginVo().getLogin());

			confirmarTransacao(connection);

		} catch (Exception e) {
			voltarTransacao(connection);

		} finally {
			closeConnection(connection);
		}
	}

	public void excluirGerente(Integer matricula, String login) throws IntegrationException {
		GerenteDAO gerenteDAO;
		LoginDAO loginDAO;
		Connection connection = obterConexao();
		try {
			iniciarTransacao(connection);
			gerenteDAO = new GerenteDAO();
			loginDAO= new LoginDAO();
			
			loginDAO.excluirLogin(login);
			gerenteDAO.excluirGerente(connection, matricula, login);
			gerenteDAO.excluirFuncionarioGerente(connection, matricula);
			
			confirmarTransacao(connection);

		} catch (Exception e) {
			voltarTransacao(connection);

		} finally {
			closeConnection(connection);
		}
	}

	public GerenteVo obterGerente(Integer matricula) throws IntegrationException {
		GerenteDAO gerenteDAO = null;
		GerenteVo gerente = null;
		try {
			gerenteDAO = new GerenteDAO();
			gerente = new GerenteVo();
			gerente = gerenteDAO.obterGerente(matricula);

			return gerente;
		} catch (Exception e) {
			throw new IntegrationException(e.getMessage());
		}

	}

}
